package sanrenxing.utils;

import java.sql.*;

/**
 * @description：数据库连接工具类
 * @auth：yidu
 * @date:2020/7/7 0007 - 9:57
 * @version:1.0
 */
public class JdbcUtils {
    //数据库驱动程序字符串
    private static String driver="com.mysql.cj.jdbc.Driver";
    //连接字符串url
    private static String url="jdbc:mysql://localhost:3306/exams?" +
            "useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT";
    //用户名
    private static String user="root";
    //连接密码
    private static String pwd="";

    //静态块：实现类加载时，加载数据库的驱动程序
    static{
         try {
            //注册驱动程序
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 私有的构造方法
     * 工厂模式：不允许在类的外部使用new来创建对象，
     * 该类对象只能由本类内部构建
     */
    private JdbcUtils(){

    }

    /**
     * 数据库的连接方法
     * @return 连接对象
     * @throws SQLException 调用本方法时必须处理SQLException异常
     */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,pwd);
    }

    /**
     * 释放数据库连接、语句对象、结果集对象资源
     * @param rs 结果集对象
     * @param pstmt 语句对象
     * @param conn 数据库连接对象
     */
    public static void close(ResultSet rs, Statement pstmt,Connection conn){
        try {
            //如果结果集对象不为空，则关闭
            if(rs!=null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            try{
                //如果语句对象不为空,则关闭
                if(pstmt!=null){
                    pstmt.close();
                }
            }catch (SQLException e){
                e.printStackTrace();
            } finally{
                try{
                    //如果连接对象不为空，则关闭
                    if(conn!=null){
                        conn.close();
                    }
                } catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}
